﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using DataAccessLayer;
using BusinessLogicLayer;
using Entities;
using Utilities;
using BusinessLogicLayer.Validation;
using QuanLyTKB_TienDoGD.In;
//using QuanLyTKB_TienDoGD.In;

namespace QuanLyTKB_TienDoGD.QuanLyMonHoc
{
    public partial class frmQLMonHoc : Office2007Form
    {
        /// <summary>
        /// Phương thức tạo lập _repository
        /// </summary>
        private IRepository<MonHoc> _repository;
        /// <summary>
        /// Phương thức tạo lập _manager
        /// </summary>
        private MonHocManager _manager;
        /// <summary>
        /// Tạo form frmQLMonHoc
        /// </summary>
        public frmQLMonHoc()
        {
            InitializeComponent();
            dgvDSMonHoc.AutoGenerateColumns = false;
        }
        /// <summary>
        /// Hàm làm mới Môn học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLamMoi_Click(object sender, EventArgs e)
        {
            dgvDSMonHoc.DataSource = _repository.GetAll().ToList();
            txtTenMH.ResetText();
        }
        /// <summary>
        /// Tạo đối tượng lớp học
        /// </summary>
        List<MonHoc> ds = new List<MonHoc>();
        /// <summary>
        /// Hàm load Môn Học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmQLMonHoc_Load(object sender, EventArgs e)
        {
            //_repository = new Repository<MonHoc>();
            //_manager = new MonHocManager(_repository);
            //dgvDSMonHoc.DataSource = _repository.GetAll().ToList();
            _repository = new Repository<MonHoc>();
            _manager = new MonHocManager(_repository);
            ds = MonHoc.Repository.Query("select * from MonHoc");
            dgvDSMonHoc.DataSource = ds;
        }
        /// <summary>
        /// Hàm so sánh 2 môn học với nhau
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        private bool sosanh(MonHoc a, MonHoc b)
        {
            if (a.TenMH.CompareTo(b.TenMH) != 0) return false;
            if (a.SoTCLT != b.SoTCLT) return false;
            if (a.SoTCTH != b.SoTCTH) return false;
            if (a.BatBuoc != b.BatBuoc) return false;
            return true;
        }
        /// <summary>
        /// Hàm kiểm tra sự thay đổi của tất cả 
        /// </summary>
        /// <returns></returns>
        private bool KiemTraSuThayDoiCuaTatca()
        {
            foreach (DataGridViewRow row in dgvDSMonHoc.Rows)
            {
                MonHoc mh = new MonHoc();
                mh = MonHoc.Repository.GetByID(row.Cells[1].Value.ToString());

                MonHoc mh2 = new MonHoc();
                mh2.MaMH = row.Cells[1].Value.ToString();
                mh2.TenMH = row.Cells[2].Value.ToString();
                mh2.SoTCLT = (int)row.Cells[4].Value;
                mh2.SoTCTH = (int)row.Cells[5].Value;
                mh2.BatBuoc = (bool)row.Cells[6].Value;

                if (!sosanh(mh, mh2)) return true;

                //int SiSo = (int)row.Cells[2].Value;
                //if (LopHoc.Repository.GetByID(row.Cells[1].Value.ToString()).SiSo != SiSo) return true;
            }
            return false;
        }
        /// <summary>
        /// Hàm cập nhật môn học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonbuttonCapNhat_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn cập nhật lại?", "Cập nhật môn học", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.Cancel)
            {
                btnLamMoi.PerformClick();
                return;
            }
            if (!KiemTraSuThayDoiCuaTatca())
            {
                MessageBox.Show("Không có sự thay đổi nào");
                return;
            }
            MonHoc mh = new MonHoc();
            foreach (DataGridViewRow row in dgvDSMonHoc.Rows)
            {
                mh.MaMH = row.Cells[1].Value.ToString();
                mh.TenMH = row.Cells[2].Value.ToString();
                mh.SoTCLT = (int)row.Cells[4].Value;
                mh.SoTCTH = (int)row.Cells[5].Value;
                mh.BatBuoc = (bool)row.Cells[6].Value;


                var vResult = _manager.Validate(mh);
                if (vResult.Valid)
                {
                    MonHoc.Repository.Update(mh);
                }
                else
                {
                    MessageBox.Show(vResult.ToString());
                    return;

                }

            }
            MessageBox.Show("Đã cập nhật xong!");


        }
        /// <summary>
        /// Hàm xóa môn học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn xóa các môn học đã chọn?", "Xóa môn học", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) == DialogResult.Cancel)
                return;
            foreach (DataGridViewRow row in dgvDSMonHoc.Rows)
            {
                if (row.Cells[0].Value != null && row.Cells[0].Value.Equals(true))
                {
                    var aResult = _manager.Delete(row.Cells[1].Value.ToString());
                    if (aResult.Success) MessageBox.Show("Xóa thành công!");
                    else MessageBox.Show("Dữ liệu môn học này đang được sử dụng!", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
              
            }

           
            dgvDSMonHoc.DataSource = _repository.GetAll().ToList();
        }
        /// <summary>
        /// Hàm thêm môn học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThem_Click(object sender, EventArgs e)
        {
            var frm = new frmAddMonHoc(_manager, this);
            frm.Text = "Thêm môn học";
            frm.ShowDialog();
            dgvDSMonHoc.DataSource = _repository.GetAll().ToList();
            //
            //var frm = new frmThemLopHoc(_manager, this);
            //frm.ShowDialog();
            //dgvQuanLyLopHoc.DataSource = _repository.GetAll().ToList();
        }
        /// <summary>
        /// Hàm tìm kiếm môn học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtTenMH_TextChanged(object sender, EventArgs e)
        {
            var aResult = _manager.Find(s => s.TenMH.IndexOf(txtTenMH.Text) >= 0);
            if (aResult.Success)
                dgvDSMonHoc.DataSource = aResult.Result;
            else
                dgvDSMonHoc.DataSource = null;
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            frmInMonHoc frm = new frmInMonHoc();
            frm.Show();
        }

        private void buttonX1_Click(object sender, EventArgs e)
        {

        }
    }
}
